"""
测试用例1：
1、打开百度页面
2、输入：selenium
3、点击搜索按钮
4、判断当前的页面是否是要搜索的
"""
import time

"""
脚本的代码写是没有问题的，但是没有加上等待方式
等元素加载完成之后，再去做操作
等待方式有三种：
1、time.sleep() : 强制等待，代码运行到此，强制等待几s
2、webdriverwait() : 显示等待，代码会去在规定的时间内频繁的去找元素，如果找不到，则抛出异常 
3、implicitly_wait()：隐式等待，定义一次，整篇的py文件都会受用到
"""
from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait # 显示等待的库
from selenium.webdriver.support import expected_conditions as EC # 抛出异常
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.by import By
from time import sleep
# 指定浏览器的驱动位置
services = Service("./chromedriver.exe")
# 初始化driver
driver = webdriver.Chrome(service=services)
# 打开浏览器
driver.get("https://www.baidu.com/")
# 浏览器最大化
driver.maximize_window()
# 隐式等待
driver.implicitly_wait(15)
# 输入selenium
driver.find_element(By.NAME,"wd").send_keys("selenium")
# 点击百度一下搜索按钮
driver.find_element(By.ID,"su").click()
# 获取第二个链接，做断言
# time.sleep(3) # 强制等待，代码运行到此，强制等待几秒 加载元素
assert_text = driver.find_element(By.XPATH,"//*[@id='1']/div/div[1]/h3/a").text
print(assert_text)
# 断言结果是否准确
assert assert_text == "Selenium"
"""# 显示等待定位元素：三个形参，第一个是driver，第二个是总的时长，第三个是找元素的频率。until(EC.presence_of_element_located(这里传递的是要元组))
WebDriverWait(driver,10,0.5).until(EC.presence_of_element_located((By.NAME,"wd"))).send_keys("selenium")
# 点击百度一下搜索按钮
WebDriverWait(driver,10,0.5).until(EC.presence_of_element_located((By.ID,"su"))).click()
#获取第二个链接，做断言
assert_text = WebDriverWait(driver,10,0.5).until(EC.presence_of_element_located((By.XPATH,"//*[@id='1']/div/div[1]/h3/a"))).text
assert assert_text == "Selenium"
"""
time.sleep(3)
"""
三种等待方式的优缺点
【强制等待】：
特点  代码运行到此，强制等待几秒，继续做下一个操作
优点  像是出现弹窗，或者是其他需要等待的控件，加上强制等待，元素加载出来后再去做操作会好一点
缺点  如果没有用到那么多的等待时长，它也会死等
【显示等待】：
特点  在规定的时间内，频繁去找元素，找到了则去做操作，找不到则抛出异常
优点  找元素的频率很高，一次找不到还有下次，直到找到为止，不会浪费掉后面的时间
缺点  代码量有点多
【隐式等待】：
特点  开局声明一次，后面的元素都会享受到加载时长
优点  节省了加强制等待的代码量，元素都会加载完以后再去做操作，所以不会出现找不到元素的情况
缺点  正是因为它把全部的元素加载出来，再去做操作，所以导致很多的静态资源我们不需要，它也要加载完再去做操作
"""
